Actualmente estoy creando una resolución de AWS Lambda que utiliza la biblioteca mysql de Nodejs. En este momento, mi lambda es capaz de ejecutar una consulta a la base de datos durante la primera invocación. Sin embargo, en las invocaciones posteriores se produce el error "No se puede poner en cola la consulta después de invocar la salida". Soy consciente de que tiene algo que ver con la conexión a la base de datos, pero si no me equivoco, 'connection.query' debería estar haciendo una conexión implícita a la base de datos. También estoy llamando a la 'conexión.fin' dentro de la devolución de llamada. ¿Alguien podría echarme una mano en esto?
Aquí está el código Lambda index.js:
/* Amplify Params - DO NOT EDIT API_SIMPLETWITTERCLONE_GRAPHQLAPIENDPOINTOUTPUT API_SIMPLETWITTERCLONE_GRAPHQLAPIIDOUTPUT API_SIMPLETWITTERCLONE_GRAPHQLAPIKEYOUTPUT AUTH_SIMPLETWITTERCLONEB1022521_USERPOOLID ENV REGION Amplify Params - DO NOT EDIT */ const mysql = require("mysql"); // const util = require("util"); const config = require("./config.json"); const connection = mysql.createConnection({ host: config.dbhost, user: config.dbuser, password: config.dbpassword, database: config.dbname, }); // resolvers const resolvers = { Query: { getAllUser: (event) => { return getAllUser(); }, }, }; function executeQuery(sql, params) { return new Promise((resolve, reject) => { const queryCallback = (error, results) => { if (error) { console.log("Error occured during query: " + error.message); connection.destroy(); reject(error); } else { console.log("Connected to database and executed query"); console.log("Results:", results); connection.end((err) => { if (err) { console.log("there was an error closing database:" + err.message); } console.log("database closed"); resolve(results); }); } }; if (params) { connection.query(sql, [...params], (error, results) => { queryCallback(error, results); }); } else { connection.query(sql, (error, results) => { queryCallback(error, results); }); } }); } async function getAllUser() { const sql = "SELECT * FROM User"; try { const users = await executeQuery(sql); return users; } catch (error) { throw error; } } exports.handler = async (event) => { // TODO implement console.log("event", event); console.log('DB connection var', connection); const typeHandler = resolvers[event.typeName]; if (typeHandler) { const resolver = typeHandler[event.fieldName]; if (resolver) { try { return await resolver(event); } catch (error) { throw error; } } } throw new Error("Resolver not found"); };Estás finalizando tu conexión durante la primera invocación. Como resultado, la segunda invocación ya no tiene esa conexión.
Si crea el objeto de connection durante la importación del módulo , no lo .end() en su invocación.
Si desea .end() el objeto de connection durante la invocación , también debe crearlo durante la invocación .